package es.javamyadmin.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import es.javamyadmin.beans.LoginBean;
import es.javamyadmin.pojo.Error;
import es.javamyadmin.pojo.Mensaje;
/**
 * Servlet que crea una base de datos
 * @author Emilio Javier Castillo Gonzalez
 * @author Hector Delgado Duran
 */
public class CrearBDServlet extends HttpServlet {
    /**
	 * 
	 */
	private static final long serialVersionUID = -1803016469360952524L;
	Error error = null;


	/**
	 * Metodo que llama a doPost
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
	/**
	 * Metodo que crea la base de datos
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		if(request.getParameter("nombreDatabase") != null && !request.getParameter("nombreDatabase").trim().equals("")){
			
			String nombreBD = request.getParameter("nombreDatabase");
			
			
			LoginBean datosLogin = new LoginBean();
			
			datosLogin = (LoginBean) request.getSession().getAttribute("datosLogin");
			
			String user = datosLogin.getUsuario();     
	        String pass = datosLogin.getPassword();
	        String host = datosLogin.getServidor();
	        String port = datosLogin.getPuerto();
			InputStream path = getServletContext().getResourceAsStream("/WEB-INF/properties/mensajes.properties");
	        Connection conexion = null;
	    	Statement estamento = null;
	    	PreparedStatement pstm = null;
	    	ResultSet resultado = null;
	    	nombreBD = nombreBD.replace(" ", "");
	    	
	    	
			try{
				Class.forName("com.mysql.jdbc.Driver");                
	      	    conexion=DriverManager.getConnection("jdbc:mysql://"+host+":"+port+"/", user, pass);
	      	    
	      	    pstm = conexion.prepareStatement("CREATE DATABASE "+nombreBD);
	      	    pstm.execute();
	      	    
			} catch(SQLException e){
				e.printStackTrace();
				error = new Error(Mensaje.getMensaje(path, String.valueOf(e.getErrorCode())), e.getMessage().replace("'", "\\'"), "");
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}finally{
				if(resultado != null){
					try {
						resultado.close();
					} catch(SQLException e){
						e.printStackTrace();
					}
					resultado = null;
				}
				if(estamento != null){
					try {
						estamento.close();
					} catch(SQLException e){
						e.printStackTrace();
					}
					estamento = null;
				}
				if(pstm != null){
					try {
						pstm.close();
					} catch(SQLException e){
						e.printStackTrace();
					}
					pstm = null;
				}
				if(conexion != null){
					try {
						conexion.close();
					} catch(SQLException e){
						e.printStackTrace();
					}
					conexion = null;
				}
			}
			
			/*Capturo los errores*/
			if(error != null && error.getError() != null && !error.getError().equals("")){
				request.setAttribute("error", error.getError());
				if(error.getDescripcion() != null && !error.getError().trim().equals("")){
					request.setAttribute("descripcion", error.getDescripcion());
				}
				request.getRequestDispatcher("jsp/inicio.jsp").forward(request,response);
				
			}else{
				request.setAttribute("ok", "Base de Datos creada satisfactoriamente ");
				request.getRequestDispatcher("jsp/lista-tablas-bd.jsp?bd="+nombreBD).forward(request,response);
			}
		}
		else{
			request.setAttribute("error", "Tiene que introducir un nombre para la base de datos");
			request.getRequestDispatcher("jsp/inicio.jsp").forward(request,response);
		}
	}
}
